

const puppeteer = require('puppeteer')
const axios = require('axios')
const fs = require('fs')
const ExcelJS = require('exceljs');
;( async function (){
  const browser = await puppeteer.launch({
    headless: false, //取消无头模式
    defaultNavigationTimeout: 60000, // 设置页面导航的超时时间为 60 秒
    defaultTimeout: 60000 // 设置其他操作的超时时间为 60 秒
  })
  const page = await browser.newPage() //打开一个页面
  await page.setViewport({ width: 1920, height: 1080 }) //设置页面宽高
  await page.goto('https://web.591adb.cn/ccgydxtsg.html',{
    waitUntil: 'networkidle0' // 等待网络空闲
  })
  await page.waitForSelector('.recommend .recommendSwiper ') //等待这个元素出现

  page.on('console', (msg) => {
    console.log('页面日志:', msg.text())
  })

  const images = []
  for  (const el of Array.from(await page.$$('.recommend .recommendSwiper .swiper-container .swiper-slide'))) {
    const [imgEl, nameEl] = await Promise.all([ el.$('img'),el.$('.title')])
    const [url, name] = await  Promise.all([(await imgEl.getProperty('src')).jsonValue(), (await nameEl.getProperty('innerText')).jsonValue()])
    images.push({
      url,
      name
    })
  }
  console.log(images);
  const workbook = new ExcelJS.Workbook();

// 添加一个 worksheet
  const worksheet = workbook.addWorksheet('Magazines');

// 添加标题行
  worksheet.addRow(["Name", "Image"]);
  async function downLoadImage(url, name) {
    return  new Promise(async (resolve, reject) =>{
      try {
        const res = await axios.get(url, { responseType: 'arraybuffer' })
        fs.writeFileSync(`./images/${name}.jpg`, res.data)
        resolve(res.data)
      } catch (error) {}
    }
  )

  }
  for  await (const img of images) {
    const imageData = await downLoadImage(img.url, img.name);
    const base64ImageData = Buffer.from(imageData, 'binary').toString('base64');
    const imageId = workbook.addImage({
      base64: base64ImageData,
      extension: 'png',
    });
    // worksheet.properties.defaultRowHeight = 200;
    const lastRowIndex = worksheet.lastRow.number;
    console.log(worksheet.lastRow.number)

// // 计算新的行数和列数，以便将图像添加到正确的位置
//     const newRow = lastRowIndex + 1; // 这里假设您的标题行在第一行，所以新的图像行从标题行的下一行开始
//     const newCol = 1; // 这里假设您的图像列从第二列开始
//
// // 添加图像到工作表
//     worksheet.addImage(imageId, {
//       tl: { col: newCol, row: newRow },
//       ext: { width: 200, height: 200 },
//       editAs: 'oneCell',
//     });

// 合并单元格
//     worksheet.mergeCells(newRow, newCol, newRow + 1, newCol + 1); // 合并包含图像的两个单元格
    worksheet.addRow([img.name, ''])

// 添加图像名称到下一列
//     worksheet.getCell(`B${newRow}`).value = img.name;
  }
  const excelFilePath = 'magazines.xlsx';
  workbook.xlsx.writeFile(excelFilePath)
      .then(() => {
        console.log(`Excel 文件已导出到 ${excelFilePath}`);
      })
      .catch(err => {
        console.error('Error occurred while exporting Excel:', err);
      });
  browser.close()
}())


// const puppeteer = require('puppeteer')
// const path = require('path')
//
// ;(async () => {
//   const browser = await puppeteer.launch()
//   const page = await browser.newPage()
//  await  page.setViewport({ width: 2160, height: 1440 })
//
//   await page.goto('http://yueyuan.591adb.cn/#/home', {
//     waitUntil: 'networkidle0'
//   })
//
//
//
//   // 生成 PDF
//   await page.pdf({ path: path.join(__dirname, 'example.pdf'), width:2160, height: 1440})
//
//   // await  page.screenshot({path: path.join(__dirname, 'example.png'),fullPage: true})
//   await browser.close()
// })()
